package com.yc;

import java.lang.annotation.*;
import java.lang.reflect.Method;
import java.util.Arrays;

@A(name = "a",ages = {1,2,3})
@WebServlet(value = "hello.s",type = "efg")
public class Demo2 {
    @A(name="a",ages = {1})
    int a;

    @A(name="abc",ages = {1})
   private void test(@A(name="abc",ages = 1) int a){

    }

    public static void main(String[] args) throws NoSuchMethodException {
        //获取类上面的注解信息
       A a= Demo2.class.getAnnotation(A.class);//获取注解类型，此方法使用对象的方式返回类 获取类上面注解信息
        System.out.println("A="+a);

       A a1= SubDemo2.class.getAnnotation(A.class);
        System.out.println("a1="+a1);
        System.out.println("a1="+a1.name());//a1=abc
        System.out.println("a1="+ Arrays.toString(a1.ages()));//a1=[1, 2, 3]


//获取方法上面的注解信息
        Method method = Demo2.class.getDeclaredMethod("test",int.class); // 方法名 参数class对象  int.class表示int类型的Class对象
       A a2= method.getAnnotation(A.class);
        System.out.println("a2="+a2.name());
    }
}
class SubDemo2 extends Demo2{}



@Target({ElementType.TYPE,ElementType.FIELD,ElementType.METHOD,ElementType.PARAMETER})// 类、属性、方法、参数
    @Retention(RetentionPolicy.RUNTIME)
@Inherited
@interface A{
    String name() default "abc";
    int [] ages();
}

@Target(ElementType.TYPE)
@interface WebServlet{
    String value(); //value 是默认属性, 单独定义value时, 可以不写属性名： @WebServlet("hello.s")  其他的都要写属性名像这样 @A(name="abc")
    String type() default "abc";
}